using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace Avon
{
    /// <summary>
    /// a kliensData structura
    /// </summary>
    public struct KliensData
    {
        int m_KliensId;
        string m_KliensNev;
        string m_CNP;
        string m_Szuletesnap;
        TanacsadonoData m_Tanacsadono;
        string m_Email;
        string m_Cim;
        string m_Telefonszam;
        /// <summary>
        /// getterek es setterek
        /// </summary>
        public int KliensId
        {
            get { return m_KliensId; }
            set { m_KliensId = value; }
        }
        /// <summary>
        /// lekerem a kliens nevet
        /// </summary>
        public string KliensNev
        {
            get { return m_KliensNev; }
            set { m_KliensNev = value; }
        }
        /// <summary>
        /// le kerem a kliens CNPjet
        /// </summary>
        public string CNP
        {
            get { return m_CNP; }
            set { m_CNP = value; }
        }
        /// <summary>
        /// le kerem a Kliens szuletesnapjat
        /// </summary>
        public string Szuletesnap
        {
            get { return m_Szuletesnap; }
            set { m_Szuletesnap = value; }
        }
        /// <summary>
        /// le kerem a kliens tanacsadonojet a TanacsadonoData segitsegevel
        /// </summary>
        public TanacsadonoData Tanacsadono
        {
            get { return m_Tanacsadono; }
            set { m_Tanacsadono = value; }
        }
        /// <summary>
        /// le kerem a kliens email cimet
        /// </summary>
        public string Email
        {
            get { return m_Email; }
            set { m_Email = value; }
        }
        /// <summary>
        /// le kerem a kliens cimet
        /// </summary>
        public string Cim
        {
            get { return m_Cim; }
            set { m_Cim = value; }
        }
        /// <summary>
        /// le kerem a kliens telefonszamat
        /// </summary>
        public string Telefonszam
        {
            get { return m_Telefonszam; }
            set { m_Telefonszam = value; }
        }
    }
    /// <summary>
    /// szarmaztatom a KliensDAlt a DALbol, 
    /// itt fogom megirni a metodusokat amikre szuksegem lesz a kliensForm
    /// </summary>
    public class KliensDAL : DAL
    {
        /// <summary>
        /// Visszateriti a kliensek listajat a tanacsadono id szerint
        /// </summary>
        /// <param name="TanacsadonoID">a tanacsadono id-ja</param>
        /// <returns></returns>
        public List<KliensData> GetKliensList(int TanacsadonoID)
        {
            String feltetel = "";
            if (TanacsadonoID >= 0)
            {
                feltetel = " AND Kliens.TanacsadonoID = " + TanacsadonoID;
            }
            return UnivGetKliensList(feltetel);
        }

        /// <summary>
        /// Visszateriti a kliensek listajat a kliens nevuk szerint
        /// </summary>
        /// <param name="nev">a kliens neve</param>
        /// <returns></returns>
        public List<KliensData> GetKliensList(String nev)
        {
            String feltetel = " AND Kliens.Nev LIKE '" + nev + "%'";
            return UnivGetKliensList(feltetel);
        }
        /// <summary>
        /// visza teriti a kliensek listajat egy select parancsal
        /// amihez kesobb hozza adhatunke egy queryt a fentiek kozzul, attol fuggoen, hogy
        /// a KliensFormban melyikre van szuksegem
        /// </summary>
        /// <param name="feltetel">a feltetel a fenti ket listanak megfeleloen</param>
        /// <returns>vissza adja a kliensek listajat</returns>
        public List<KliensData> UnivGetKliensList(String feltetel)
        {
            string query = "SELECT Kliens.KliensID,Kliens.Nev,Kliens.CNP,Kliens.Szuletesnap,Tanacsadono.Nev,Kliens.Email,Kliens.Cim,Kliens.Telefonszam" +
                        " FROM Kliens, Tanacsadono" + " WHERE Kliens.TanacsadonoID = Tanacsadono.TanacsadonoID";

            query += feltetel;

            string error = string.Empty;

            SqlDataReader rdr = ExecuteReader(query, ref error);

            List<KliensData> KliensList = new List<KliensData>();
            if (error == "OK")
            {
                while (rdr.Read())
                {
                    KliensData item = new KliensData();
                    item.KliensId = Convert.ToInt32(rdr[0]);
                    item.KliensNev = rdr[1].ToString();
                    item.CNP = rdr[2].ToString();
                    item.Szuletesnap = rdr[3].ToString();
                    item.Tanacsadono = new TanacsadonoData(rdr[4].ToString());
                    item.Email = rdr[5].ToString();
                    item.Cim = rdr[6].ToString();
                    item.Telefonszam = rdr[7].ToString();

                    KliensList.Add(item);
                }
            }
            CloseDataReader(rdr);
            return KliensList;
        }
        /// <summary>
        /// le kerem egy metodussal, hogy hany darab kliensem van az adatbazisban
        /// </summary>
        /// <returns>a kliensek szamat adja vissza</returns>
       public int GetKliensNumber ()
       {
           string query = "SELECT COUNT(*) FROM Kliens", error="";
           object value = ExecuteScalar(query, ref error);
           if (error == "OK")
           {
               return Convert.ToInt32(value);
           }
           else
           {
              return -1;
           }
      }

      /// <summary>
      /// a modosit metodus, ezt fogja folhasznalni a KliensFormban a modosit gomb
      /// </summary>
      /// <param name="KliensId">a kliens id-ja</param>
      /// <param name="KliensNev">a kliens neve</param>
      /// <param name="CNP">a kliens CNPje</param>
      /// <param name="Szuletesnap">a kliens szuletesnapja</param>
      /// <param name="TanacsadonoID">a kliesn tanacsadonoje</param>
      /// <param name="Email">a kliens email cime</param>
      /// <param name="Cim">a kliens cime</param>
      /// <param name="Telefonszam">a kliens telefonszama</param>
      /// <returns>vissza adja egy select parancs eredmenyet, amellyel modositjuk a kliensek tablat</returns>
     public string ModositKliens(int KliensId, string KliensNev, string CNP, string Szuletesnap, int TanacsadonoID, string Email, string Cim, string Telefonszam)
     {
          string query = "UPDATE Kliens" + 
                        " SET Nev = '" + KliensNev +
                          "', CNP = '" + CNP.ToString() +
                          "', Szuletesnap = '" + Szuletesnap.ToString() +
                          "', TanacsadonoID = " + TanacsadonoID.ToString() +
                          ", Email = '" + Email.ToString() +
                          "', Cim = '" + Cim.ToString() + 
                          "', Telefonszam = '" + Telefonszam.ToString() + 
                              "' WHERE KliensID = " + KliensId.ToString();

          return ExecuteNonQuery(query);
     } 
        /// <summary>
        /// a beszur metodus, ezt fogja meghivni a KliensFormban a beszur gomb
        /// </summary>
        /// <param name="KliensNev">a kliens neve</param>
        /// <param name="CNP">a kliens CNPje</param>
        /// <param name="Szuletesnap">a kliens szuletesnapja</param>
        /// <param name="TanacsadonoID">a kliens tanacsadonoje</param>
        /// <param name="Email">a kliens email cime</param>
        /// <param name="Cim">a kliens cime</param>
        /// <param name="Telefonszam">a kliens telefonszama</param>
        /// <returns>egy SQL parancs erteket teriti vissza, amellyel be lehet szurni a kliensek tablaba</returns>
        public string BeszurKliens(string KliensNev, string CNP, string Szuletesnap, int TanacsadonoID, string Email, string Cim, string Telefonszam)
        {
           string command = "INSERT INTO Kliens(Nev,CNP,Szuletesnap,TanacsadonoID,Email,Cim,Telefonszam)" +
	                        " VALUES ('"+ KliensNev +"','"+ CNP +"','"+ Szuletesnap +"',"+ TanacsadonoID +",'"+ Email +"','" +  Cim+ "','"+ Telefonszam +"')";

           return ExecuteNonQuery(command);
        }

        /// <summary>
        /// a torol metodus, ezt fogja meghivni a torol gomb a KliensFormban
        /// </summary>
        /// <param name="KliensId">a kliens idja, ez alapjan torlok</param>
        /// <returns>egy SQL parancs eredmenyet teriti vissza, amely kitorol egy kliens a kliens tablabol</returns>
        public string TorolKliens(int KliensId)
        {
            string query = "DELETE FROM Kliens WHERE KliensId = " + KliensId;

            return ExecuteNonQuery(query);
        } 

    }
}
